Make kernel_args compile
authorFelix Krull <f_krull@gmx.de>
Sat, 31 Aug 2019 12:26:10 +0000 (14:26 +0200)
committerColin Walters <walters@verbum.org>
Fri, 6 May 2022 16:53:54 +0000 (12:53 -0400)
rust-bindings/rust/src/kernel_args.rs
rust-bindings/rust/src/tests/kernel_args.rs [new file with mode: 0644]
rust-bindings/rust/src/tests/mod.rs

index 3d1ed4dcae0d980a4595e47fe423fed21d1ad4fb..018964a46bae5b92ce143b0aa7aac0a390c1876e 100644 (file)
@@ -6,6 +6,7 @@ use glib::translate::*;
 #[cfg(any(feature = "v2019_3", feature = "dox"))]
 use glib::GString;
 use ostree_sys;
+use ostree_sys::OstreeKernelArgs;
 use std::fmt;
 use std::ptr;
 use Error;
@@ -15,7 +16,7 @@ glib_wrapper! {
     pub struct KernelArgs(Boxed<ostree_sys::OstreeKernelArgs>);
 
     match fn {
-        copy => |ptr| ostree_sys::ostree_kernel_args_copy(mut_override(ptr)),
+        copy => |_ptr| unimplemented!(),
         free => |ptr| ostree_sys::ostree_kernel_args_free(ptr),
     }
 }
@@ -28,7 +29,7 @@ impl KernelArgs {
         }
     }
 
-    #[cfg(any(feature = "v2019_3", feature = "dox"))]
+    /*#[cfg(any(feature = "v2019_3", feature = "dox"))]
     pub fn append_argv(&mut self, argv: &str) {
         unsafe {
             ostree_sys::ostree_kernel_args_append_argv(
@@ -47,7 +48,7 @@ impl KernelArgs {
                 prefixes.to_glib_none().0,
             );
         }
-    }
+    }*/
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
     pub fn append_proc_cmdline<P: IsA<gio::Cancellable>>(
@@ -103,10 +104,10 @@ impl KernelArgs {
     }
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
-    pub fn get_last_value(&mut self, key: &str) -> Option<GString> {
+    pub fn get_last_value(&self, key: &str) -> Option<GString> {
         unsafe {
             from_glib_none(ostree_sys::ostree_kernel_args_get_last_value(
-                self.to_glib_none_mut().0,
+                self.to_glib_none().0 as *mut OstreeKernelArgs,
                 key.to_glib_none().0,
             ))
         }
@@ -146,7 +147,7 @@ impl KernelArgs {
         }
     }
 
-    #[cfg(any(feature = "v2019_3", feature = "dox"))]
+    /*#[cfg(any(feature = "v2019_3", feature = "dox"))]
     pub fn replace_argv(&mut self, argv: &str) {
         unsafe {
             ostree_sys::ostree_kernel_args_replace_argv(
@@ -154,7 +155,7 @@ impl KernelArgs {
                 argv.to_glib_none().0,
             );
         }
-    }
+    }*/
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
     pub fn replace_take(&mut self, arg: &str) {
@@ -167,30 +168,28 @@ impl KernelArgs {
     }
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
-    fn to_string(&mut self) -> GString {
+    fn to_gstring(&self) -> GString {
         unsafe {
             from_glib_full(ostree_sys::ostree_kernel_args_to_string(
-                self.to_glib_none_mut().0,
+                self.to_glib_none().0 as *mut OstreeKernelArgs,
             ))
         }
     }
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
-    pub fn to_strv(&mut self) -> Vec<GString> {
+    pub fn to_strv(&self) -> Vec<GString> {
         unsafe {
             FromGlibPtrContainer::from_glib_full(ostree_sys::ostree_kernel_args_to_strv(
-                self.to_glib_none_mut().0,
+                self.to_glib_none().0 as *mut OstreeKernelArgs,
             ))
         }
     }
 
-    //#[cfg(any(feature = "v2019_3", feature = "dox"))]
-    //pub fn cleanup(loc: /*Unimplemented*/Option<Fundamental: Pointer>) {
-    //    unsafe { TODO: call ostree_sys:ostree_kernel_args_cleanup() }
-    //}
+    // Not needed
+    //pub fn cleanup(loc: /*Unimplemented*/Option<Fundamental: Pointer>)
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
-    pub fn from_string(options: &str) -> Option<KernelArgs> {
+    pub fn from_string(options: &str) -> KernelArgs {
         unsafe {
             from_glib_full(ostree_sys::ostree_kernel_args_from_string(
                 options.to_glib_none().0,
@@ -199,7 +198,7 @@ impl KernelArgs {
     }
 
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
-    pub fn new() -> Option<KernelArgs> {
+    pub fn new() -> KernelArgs {
         unsafe { from_glib_full(ostree_sys::ostree_kernel_args_new()) }
     }
 }
@@ -214,6 +213,12 @@ impl Default for KernelArgs {
 impl fmt::Display for KernelArgs {
     #[inline]
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "{}", self.to_string())
+        write!(f, "{}", self.to_gstring())
+    }
+}
+
+impl<T: AsRef<str>> From<T> for KernelArgs {
+    fn from(v: T) -> Self {
+        KernelArgs::from_string(v.as_ref())
     }
 }
diff --git a/rust-bindings/rust/src/tests/kernel_args.rs b/rust-bindings/rust/src/tests/kernel_args.rs
new file mode 100644 (file)
index 0000000..0e08188
--- /dev/null
@@ -0,0 +1,39 @@
+#[cfg(feature = "v2019_3")]
+use crate::KernelArgs;
+
+#[test]
+fn should_create_and_fill_kernel_args() {
+    let mut args = KernelArgs::new();
+    args.append("key=value");
+    args.append("arg1");
+    args.append("key2=value2");
+    assert_eq!(args.to_string(), "key=value arg1 key2=value2");
+}
+
+#[test]
+fn should_convert_to_string_vec() {
+    let mut args = KernelArgs::new();
+    args.parse_append("key=value arg1 key2=value2");
+    assert_eq!(
+        args.to_strv()
+            .iter()
+            .map(|s| s.as_str())
+            .collect::<Vec<_>>(),
+        vec!["key=value", "arg1", "key2=value2"]
+    );
+}
+
+#[test]
+fn should_get_last_value() {
+    let mut args = KernelArgs::new();
+    args.append("key=value1");
+    args.append("key=value2");
+    args.append("key=value3");
+    assert_eq!(args.get_last_value("key").unwrap(), "value3");
+}
+
+#[test]
+fn should_convert_from_string() {
+    let args = KernelArgs::from(String::from("arg1 arg2 arg3=value"));
+    assert_eq!(args.to_strv(), vec!["arg1", "arg2", "arg3=value"]);
+}
index 6726a27e34a4493706d0ef454b0f2a6add94b9e5..ca79e91597040fc0428c54b4b622b990d2fbc8c1 100644 (file)
@@ -1,2 +1,3 @@
 mod collection_ref;
+mod kernel_args;
 mod repo;